import router from '@/router/index'
import pinia from '@/stores'
import { useCategoryStore } from '@/stores/modules/center'

const userInfoStore = useCategoryStore(pinia)

// 需要进行token检查的路径数组
const routeList = ['/center', '/shopCart']
// 路由加载前
router.beforeEach(async (to, from, next) => {
  // 获取用户的 token 信息
  const token = localStorage.getItem('token_key')
  // 如果token存在(已经登陆或前面登陆过)
  
  if (token) {
    // 如果请求的是登陆路由
    if (to.path === '/login'|| to.path === '/notLogin') {
      next({ path: '/center' })
    } else {
      // 请求的不是登陆路由
      const hasLogin = !!userInfoStore.name
      // 如果有用户信息,直接放行
      if (hasLogin) {
        next()
      } else {
        // 如果没有用户信息
        try {
          // 获取用户信息
          await userInfoStore.getUserInfo()
          // 重新跳转去目标路由
          next(to)
        } catch (error: any) {
          // 如果获取用户信息失败
          // 重置用户信息本地信息
          userInfoStore.name = ''
          userInfoStore.headImg = ''
          userInfoStore.token = ''
          userInfoStore.passwd = ''
          localStorage.removeItem('token_key')
          // 去登录
          next('/notLogin')
        }
      }
    }
  } else {
    // 没有token
    // 如果目标路径在名单中(是需要token的路径)
    if (routeList.includes(to.path)) {
      //去登录
      next('/notLogin')
    } else {
      // 放行
      next()
    }
  }
})
